﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>
using namespace std;

int main()
{
    int n = 0;
    string str;
    cin >> n >> str;

    //连续区间染成红色，所以可以用滑动窗口，染完，红色的1、2和滑动窗口外面
    //的白色1、2要相同，这是判断某个滑动窗口可不可以染色的条件
    //如何考虑环形呢？比如字符串01010101，当选择01 0101 01，中间四个字符染色，
    //直接乘2，因为后面的01和前面01也是一种情况，因为是环形
    int sum[2] = { 0 };//分别统计0，1字符的数量
    for (int i = 0; i < n; ++i)
    {
        sum[str[i] - '0']++;
    }

    int begin = 0, end = 0;
    int count[2] = { 0 };//记录滑动窗口里面的0，1字符数目
    int result = 0;
    while (end < n - 1)//10 01，如果end是小于n的画，滑动窗口为10的时候，结果为2，滑动窗口为01的时候，结果为4，结果多了2，所以要小于n-1
    {
        count[str[end] - '0']++;

        while (end - begin + 1 > n / 2)
        {
            count[str[begin] - '0']--;
            ++begin;
        }

        if (end - begin + 1 == n / 2 && count[0] == sum[0] / 2 && count[1] == sum[1] / 2)
        {
            result += 2;
        }
        ++end;
    }

    cout << result << endl;

    return 0;
}

/*
链接：https://ac.nowcoder.com/acm/problem/230830
来源：牛客网

题目描述
给定一个长度为偶数的环形 01 字符串。（环形指，第一个字符和最后一个字符是相邻的）
字符串初始每个字符都是白色。小葱想把一段连续区间染成红色，使得红色的字符'0'数量等于白色的字符'0'数量，红色的字符'1'数量等于白色的字符'1'数量。问有多少种不同的染色方法？
两个方案不同当且仅当存在一个某字符，在一个方案是染成红色，在另一个方案为白色。
输入描述:
第一行输入一个正整数n，代表字符串长度。
第二行输入一个长度为n的 01 字符串（仅由字符'0'和字符'1'组成的字符串）
数据范围：2≤n≤300000 。保证n是偶数。
输出描述:
合法的染色方案数。

示例1
输入
2
11
输出
2
说明
将第一个数字染红为一个方案。
将第二个数字染红为一个方案。
*/

